Transaction Isolation Levels (ট্রানজেকশন আইসোলেশন লেভেলস) হল একটি গুরুত্বপূর্ণ ধারণা, যা ACID (Atomicity, Consistency, Isolation, Durability) বৈশিষ্ট্য নিশ্চিত করতে সাহায্য করে। Isolation একটি ট্রানজেকশনের ডেটা অন্য ট্রানজেকশনের প্রভাব থেকে কতটা বিচ্ছিন্ন থাকবে, তা নির্ধারণ করে। MySQL-এ বিভিন্ন ট্রানজেকশন আইসোলেশন লেভেল রয়েছে, প্রতিটি লেভেল বিভিন্ন ধরনের concurrency এবং data consistency সমস্যা সমাধান করতে সাহায্য করে।
MySQL-এ মোট চারটি ট্রানজেকশন আইসোলেশন লেভেল আছে:
- Read Uncommitted
- Read Committed
- Repeatable Read
- Serializable
প্রত্যেকটি লেভেল ডেটা অ্যাক্সেসের আচরণ এবং প্রতিযোগিতামূলক ট্রানজেকশনগুলির (concurrent transactions) কিভাবে পরিচালিত হবে তা নির্ধারণ করে।
1. Read Uncommitted (সর্বনিম্ন আইসোলেশন)
- Description: এই লেভেলে, একটি ট্রানজেকশন অন্য ট্রানজেকশনের অপরিবর্তিত ডেটা (uncommitted data) দেখতে পারে। এটি dirty reads (অথবা অপরিষ্কার ডেটা) এর অনুমতি দেয়।
- Problem: ট্রানজেকশনটি যে ডেটা দেখতে পাচ্ছে তা অন্য ট্রানজেকশনে এখনও কমিট হয়নি, এবং সে ডেটা পরে অন্য ট্রানজেকশনে রোলব্যাক হতে পারে। এর ফলে অবিশ্বাস্য বা ভুল ফলাফল পাওয়া যেতে পারে।
- Example: যদি একটি ট্রানজেকশন কোনো তথ্য আপডেট করে কিন্তু কমিট না করে, তবে অন্য ট্রানজেকশন সেই অপরিবর্তিত ডেটা দেখতে পাবে। পরে প্রথম ট্রানজেকশনটি রোলব্যাক করলে, দ্বিতীয় ট্রানজেকশনে ব্যবহৃত ডেটা অকার্যকর হয়ে যাবে।
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
2. Read Committed
- Description: এই লেভেলে, একটি ট্রানজেকশন শুধুমাত্র অন্য ট্রানজেকশনের কমিটেড ডেটা দেখতে পায়। অর্থাৎ, "dirty reads" প্রতিরোধ করা হয়। তবে non-repeatable reads (যেখানে একই ট্রানজেকশন দুটি আলাদা সময়ের মধ্যে একে অপরের সাথে ভিন্ন ডেটা দেখে) এখনও সম্ভব।
- Problem: ট্রানজেকশনটি যেই ডেটা পড়ছে, তা অন্য ট্রানজেকশনের দ্বারা আপডেট হতে পারে যখন ট্রানজেকশনটি চলছে, যা non-repeatable reads সৃষ্টি করে।
- Example: যদি প্রথম ট্রানজেকশন একটি ডেটা পড়বে এবং তারপর দ্বিতীয় ট্রানজেকশন সেই ডেটা আপডেট করবে, তবে প্রথম ট্রানজেকশন যখন আবার সেই ডেটা পড়বে, এটি আগের মানের সাথে মেলাবে না।
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
3. Repeatable Read
- Description: এই লেভেলে, একটি ট্রানজেকশন একই ডেটাকে বার বার পড়তে পারে এবং প্রতি বার একই ফলাফল পাবে। এটি dirty reads এবং non-repeatable reads দুটিই প্রতিরোধ করে। তবে phantom reads (যেখানে একে অপরের সাথে মিলে না এমন নতুন রেকর্ডগুলো একটি ট্রানজেকশনের ভেতরে হাজির হয়) হতে পারে।
- Problem: যদিও ডেটা পুনরায় পড়লে আগের মতোই থাকবে, তবে অন্য ট্রানজেকশনের মাধ্যমে নতুন রেকর্ড তৈরি হতে পারে, যেটি এই ট্রানজেকশনটি পরে দেখবে না।
- Example: একটি ট্রানজেকশন যখন কোনো ডেটা আপডেট বা পড়তে থাকে, তখন সেই ডেটা অন্য ট্রানজেকশন দ্বারা পরিবর্তিত হতে পারে না, তবে নতুন রেকর্ড বা ডেটা সেই ট্রানজেকশনটি পড়বে না।
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
4. Serializable (সর্বোচ্চ আইসোলেশন)
- Description: এটি সবচেয়ে শক্তিশালী আইসোলেশন লেভেল, যেখানে প্রতিটি ট্রানজেকশন একে অপর থেকে পুরোপুরি বিচ্ছিন্ন থাকে। ট্রানজেকশনগুলি একে অপরের সাথে সিরিয়ালি (যেমন একে একে) চলবে, যা dirty reads, non-repeatable reads, এবং phantom reads সব ধরনের সমস্যা দূর করে।
- Problem: এটি সিস্টেমের পারফরমেন্সে প্রভাব ফেলতে পারে কারণ সমস্ত ট্রানজেকশন একে অপরের পরে আসবে, এবং concurrency এর সুবিধা কমে যাবে।
- Example: যদি দুটি ট্রানজেকশন একই ডেটার উপর কাজ করার চেষ্টা করে, তবে একটি ট্রানজেকশন শেষ না হওয়া পর্যন্ত অন্যটি অপেক্ষা করবে।
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Comparison of Transaction Isolation Levels
| Isolation Level | Dirty Reads | Non-Repeatable Reads | Phantom Reads | Performance |
|---|---|---|---|---|
| Read Uncommitted | Allowed | Allowed | Allowed | Fastest |
| Read Committed | Not Allowed | Allowed | Allowed | Moderate |
| Repeatable Read | Not Allowed | Not Allowed | Allowed | Slower |
| Serializable | Not Allowed | Not Allowed | Not Allowed | Slowest |
- Dirty Reads: যখন একটি ট্রানজেকশন অপরিপূর্ণ (uncommitted) ডেটা পড়তে পারে।
- Non-Repeatable Reads: যখন একটি ট্রানজেকশন পুনরায় পড়া ডেটা পরিবর্তন হতে পারে অন্য ট্রানজেকশনের মাধ্যমে।
- Phantom Reads: যখন একে অপরের সাথে মিলিত না হওয়া নতুন রেকর্ডগুলো একে একে প্রবাহিত হয়।
Choosing the Right Isolation Level
- Read Uncommitted: এটি low latency এবং high throughput প্রয়োজনের ক্ষেত্রে ব্যবহার করা যেতে পারে, তবে খুব কম নিরাপত্তা বা নির্ভুলতা নিশ্চিত করা হয়।
- Read Committed: যখন আপনি dirty reads থেকে বাঁচতে চান, তবে ডেটা একসাথে পড়া এবং আপডেট হওয়া দরকার না হলে এই লেভেল উপযুক্ত।
- Repeatable Read: যদি আপনি ডেটার অভ্যন্তরীণConsistency এবং নির্ভুলতা চান, এবং আপনি চান যে কোনো ট্রানজেকশন পুনরায় একই ডেটা পড়ুক, তবে এই লেভেল উপযুক্ত।
- Serializable: সর্বোচ্চ নির্ভুলতা এবং সম্পূর্ণ সুরক্ষা চাইলে এবং concurrency সমস্যা পরিহার করতে চাইলে, তবে এই লেভেলই সেরা।
সারাংশ
MySQL-এ transaction isolation levels এর মাধ্যমে ট্রানজেকশনগুলির মধ্যে data consistency এবং concurrency সমস্যাগুলি নিয়ন্ত্রণ করা হয়। প্রতিটি লেভেল পারফরমেন্স এবং ডেটা সুরক্ষার মধ্যে একটি ব্যালেন্স তৈরি করে, এবং আপনার প্রজেক্টের প্রয়োজন অনুযায়ী সঠিক লেভেল বেছে নেওয়া গুরুত্বপূর্ণ।
Read more